A typical operating system includes a file system. The file system provides a mechanism for the storage and retrieval of files. An application operating, either locally or remotely, on a computer system uses files as an abstraction to address data. Conventionally, this data is stored on a non-volatile storage disk.
In order to decrease the time required to read a file from the non-volatile storage device, copies of recently accessed files are cached in main memory. Thus, when a request to read a file is received, the file system may first query main memory to determine whether a copy of the file is cached. If the file is not cached in main memory, the file system may next query any auxiliary cache devices. As the time for retrieval from either main memory or an auxiliary cache device is significantly less than the time for retrieval from the non-volatile storage disk, the file is read from a cached copy in main memory or an auxiliary cache device, if possible, before it is retrieved from the non-volatile storage disk. Accordingly, for data caching to be truly effective in a storage system, data likely to be requested again in the near future should be accessible by virtue of a cached copy to gain the benefit of a reduced retrieval time.
While an ideal solution would allow for the caching and hence expedited retrieval of any and all data previously referenced by a storage system, this is not realistic. For instance, there is a price disparity between the dynamic random access memory (DRAM) solid state devices (SSD) used in implementing main memory and the flash SSDs used in implementing auxiliary cache devices. Accordingly, storage systems can incorporate a flash-implemented auxiliary cache with a DRAM-implemented main memory to strike a balance between performance and cost.
In view of using a hybridized storage system, an effective data caching policy must account for differentiable read and write performances among the two cache implementations. For instance, flash SSDs, while more affordable than DRAM SSDs, are essentially read-biased and therefore take longer to process a write request than to process a read request. As such, scenarios calling for frequent write operations to flash SSDs may result in a system bottleneck.